home *** CD-ROM | disk | FTP | other *** search
/ DS-CD ROM 2 1993 August / DS CD-ROM 2.Ausgabe (August 1993).iso / programm / ds0257 / demo.exe / PRINT.DEM < prev    next >
Text File  |  1992-02-16  |  10KB  |  345 lines

  1. ; ----------------------------
  2. ; PRINT.DEM    - Demoprogramm für die Routinen aus PRINT.LIB
  3. ;                (für den A86)
  4. ;
  5. ;                (c) Bernd Schemmer 1990 - 1992
  6. ;                Letzter Update: 15.02.1992
  7. ;
  8. ; Übersetzen:
  9. ;  A86 MACROS.MAC PRINT.DEM PRINT.LIB DEMOS.INC TO PRINT.COM
  10. ;
  11. ; ---------------------------
  12.  
  13.          jmp start            ; Daten überspringen
  14.  
  15. logo  db CR,LF
  16.       db 'PRINT.DEM  - Demoprogramm für die Routinen aus PRINT.LIB'
  17.       db CR,LF
  18.       db '--------------------------------------------------------'
  19.       db CR,LF
  20.       db CR,LF
  21.       db 'Hinweis: Zu Testzwecken sollte entweder der Drucker OFFLINE geschaltet'
  22.       db CR,LF
  23.       db '         sein, oder als Ausgabe-Einheit für PRINT das NUL-Device angegeben'
  24.       db CR,LF
  25.       db '         werden! '
  26.       db CR,LF
  27. GETLENGTH logo
  28.  
  29.          db 64xD              ; max. Länge des Namens (für die Funktion 0Ah
  30.                               ; des Interrupt 21h)
  31. DefString FileName, 64xD      ; Puffer für einen Dateinamen
  32.  
  33.                               ; Array für die Funktion GetPRINTQueueEntrys
  34. MaxEntrys    EQU 8xD          ; (max. 8 Einträge)
  35. ArrayOfNames db MaxEntrys dup (65 dup 0)
  36.  
  37. ; ------------------
  38. start:
  39.          call ShowLogo        ; Logo ausgeben und Speicherblock verkleinern
  40.                               ; DOS-Version überprüfen
  41.          TestDOSVersion 3,00
  42.  
  43.                              ; Überprüfen, ob PRINT geladen ist
  44.          call PrintLoaded?
  45.          jnc >l1
  46.                               ; Fehler: PRINT nicht geladen
  47.          mov al,0
  48.          call ShowPrintError
  49.          jmp Ende
  50.  
  51. l1:
  52.          call Menue           ; Menue ausgeben
  53.          or al,al
  54.          jz Ende
  55.          call Auswahl         ; Menuepunkt bearbeiten
  56.          jmp start
  57.  
  58. Ende:
  59.          EndProcess 0
  60.  
  61. ; ----------------------------
  62. ; Menue
  63. ;
  64. ; Funktion:  Ausgabe des Menues
  65. ;
  66. ; Ausgabe:   AL = gewählter Menuepunkt
  67. ;                 (AL = 0 ->> Programm-Ende)
  68. ;
  69. MenueMSG db CR,LF
  70.          db 'Zur Verfügung stehende Funktionen:'
  71.          db CR,LF
  72.          db CR,LF
  73.          db '1   - Ausgabe des Status von PRINT'
  74.          db CR,LF
  75.          db '2   - Einfügen einer Datei in die Warteschlange'
  76.          db CR,LF
  77.          db '3   - Löschen einer Datei aus der Warteschlange'
  78.          db CR,LF
  79.          db '4   - Löschen aller Dateien aus der Warteschlange'
  80.          db CR,LF
  81.          db CR,LF
  82.          db '0   - Programm-Ende'
  83.          db CR,LF
  84.          db CR,LF
  85.          db 'Ihre Wahl: '
  86. GETLENGTH MenueMSG
  87.  
  88. Menue:
  89.          WRITE_STRING MenueMSG
  90. Menue0:
  91.          mov ah,08h
  92.          int 021h
  93.          cmp al,ESC            ; ESC gedrückt ?
  94.          if e mov al,'0'
  95.          sub al,'0'
  96.          cmp al,4
  97.          ja Menue0
  98.          push ax              ; Eingabe sichern!
  99.          call ShowCR_LF
  100.          pop ax
  101.          ret
  102.  
  103. ; ----------------------------
  104. ; Auswahl
  105. ;
  106. ; Funktion:  Ausführen der gewünschten Funktion
  107. ;
  108. ; Eingabe:   AL = Nummer der Funktion
  109. ;
  110. Auswahl:
  111.          cmp al,1
  112.          jne >l1
  113.          jmp _ShowPrintStatus
  114. l1:
  115.          cmp al,2
  116.          jne >l1
  117.          jmp _PrintFile
  118. l1:
  119.          cmp al,3
  120.          jne >l1
  121.          jmp _DeleteFile
  122. l1:
  123.          cmp al,4
  124.          jne >l1
  125.          jmp _DeleteFiles
  126. l1:
  127.          ret
  128.  
  129. ; ----------------------------
  130. ; _ShowPrintStatus
  131. ;
  132. ; Funktion:  Ausgabe des Status von PRINT
  133. ;
  134. MakeMsg ShowPrintStatusMSG0, CR,LF, 'Ermitteln des Status von PRINT'
  135.  
  136. ShowPrintStatusMSG1 db CR,LF
  137.                     db 'Anzahl Einträge in der Queue von PRINT: '
  138. QUeueEntrys         db '?????'
  139.                     db CR,LF
  140.                     db '(Dieses Demo kann max. 8 Dateien in der Queue von PRINT anzeigen)'
  141.                     db CR,LF
  142.                     db 'Namen der Einträge in der Queue: '
  143.                     db CR,LF
  144. GETLENGTH ShowPrintStatusMSG1
  145.  
  146. _ShowPrintStatus:
  147.          WRITE_STRING ShowPrintStatusMSG0
  148.  
  149.                               ; Einträge ermitteln
  150.          mov di,offset ArrayOfNames
  151.          mov cx,MaxEntrys
  152.          call GetPrintQueueEntrys
  153.          jnc >l1
  154.                               ; Fehler!
  155.          call ShowPrintError
  156.          ret
  157. l1:
  158.                               ; Anzahl der Einträge in die Meldung
  159.                               ; eintragen
  160.          mov di,offset QueueEntrys
  161.          mov ax,cx
  162.          call Konvert_AX_To_Dezstring
  163.  
  164.          push cx              ; Anahl der Einträge sichern
  165.          WRITE_STRING ShowPrintStatusMSG1
  166.          pop cx
  167.                               ; Namen der Einträge ausgeben
  168.          cmp cx,MaxEntrys
  169.          if a mov cx,MaxEntrys
  170.                               ; CX = Anzahl der belegten Einträge im Array
  171.          or cx,cx
  172.          jz >l1               ; keine Einträge in der Queue vorhanden!
  173.  
  174.          mov si,offset ArrayOfNames
  175. l0:
  176.          push si
  177.          push cx
  178.          lodsb
  179.          mov dx,si            ; DX -> Name
  180.          mov cl,al
  181.          xor ch,ch            ; CX = Länge des Namens
  182.          mov bx,01h
  183.          mov ah,040h
  184.          int 021h             ; Namen ausgeben
  185.          call ShowCR_LF
  186.          pop cx
  187.          pop si
  188.          add si,65xD          ; SI -> nächstes Array-Element
  189.          loop l0
  190. l1:
  191.          ret
  192.  
  193. ; ----------------------------
  194. ; _PrintFile
  195. ;
  196. ; Funktion:  Einfügen einer neuen Datei in die Queue von PRINT
  197. ;
  198. MakeMsg _PrintFileMSG0, CR,LF, 'Einfügen einer neuen Datei in die Queue von PRINT',CR,LF
  199. MakeMsg _PrintFileMSG,  CR,LF, 'Datei in die Queue von PRINT eingefügt.',CR,LF
  200.  
  201. _PrintFile:
  202.          WRITE_STRING _PrintFileMsg0
  203.  
  204.          call LeseDateiname   ; Namen der Datei ermitteln
  205.  
  206.                               ; Datei einfügen
  207.          mov si,offset FileName
  208.          call PrintFile
  209.          jnc >l1
  210.                               ; Fehler!
  211.          call ShowPrintError
  212.          jmp >l2
  213.  
  214. l1:
  215.          WRITE_STRING _PrintFileMSG
  216. l2:
  217.          ret
  218.  
  219. ; ----------------------------
  220. ; _DeleteFile
  221. ;
  222. ; Funktion:  Löschen einer  Datei aus der Queue von PRINT
  223. ;
  224. MakeMsg _DeleteFileMSG0, CR,LF, 'Löschen einer Datei aus der Queue von PRINT',CR,LF
  225. MakeMsg _DeleteFileMSG,  CR,LF, 'Datei aus der Queue von PRINT gelöscht.',CR,LF
  226.  
  227. _DeleteFile:
  228.          WRITE_STRING _DeleteFileMsg0
  229.                               ; Dateinamen lesen
  230.          call LeseDateiname
  231.                               ; Datei aus der Queue löschen
  232.          mov si,offset FileName
  233.          call DeletePrintQueueEntry
  234.          jnc >l1
  235.                               ; Fehler!
  236.          call ShowPrintError
  237.          jmp >l2
  238. l1:
  239.          WRITE_STRING _DeleteFileMSG
  240. l2:
  241.          ret
  242.  
  243. ; ----------------------------
  244. ; _DeleteFiles
  245. ;
  246. ; Funktion:  Löschen aller Dateien aus der Queue von PRINT
  247. ;
  248. MakeMsg _DeleteFilesMSG0, CR,LF, 'Löschen aller Dateien aus der Queue von PRINT',CR,LF
  249. MakeMsg _DeleteFilesMSG,  CR,LF, 'Dateien aus der Queue von PRINT gelöscht.',CR,LF
  250.  
  251. _DeleteFiles:
  252.          WRITE_STRING _DeleteFilesMsg0
  253.  
  254.                               ; Queue löschen
  255.          call DeletePrintQueueEntrys
  256.          jnc >l1
  257.                               ; Fehler!
  258.          call ShowPrintError
  259.          jmp >l2
  260. l1:
  261.          WRITE_STRING _DeleteFilesMSG
  262. l2:
  263.          ret
  264.  
  265. ; ----------------------------
  266. ; LeseDateiname
  267. ;
  268. ; Funktion:  Lesen eines Dateinames
  269. ;
  270. MakeMsg DateinamenMSG, CR,LF, 'Bitte den Dateinamen eingeben (incl. vollständigen Pfad!): '
  271.  
  272. LeseDateiname:
  273.          WRITE_STRING DateinamenMSG
  274.  
  275.          mov dx,offset FileName-1
  276.          mov ah,0Ah
  277.          int 021h
  278.  
  279.          call ShowCR_LF
  280.          ret
  281.  
  282. ; ----------------------------
  283. ; ShowPrintError
  284. ;
  285. ; Funktion:  Ausgabe einer Fehlermeldung
  286. ;
  287. ; Eingabe:   AL = Fehlernummer von PRINT
  288. ;
  289. DefString PRINTErrorMSG0,    0, CR,LF, 'Fehler: PRINT nicht geladen!'
  290. DefString PRINTErrorMSG1,    0, CR,LF, 'Fehler: Falsche Funktionsnummer!'
  291. DefString PRINTErrorMSG2,    0, CR,LF, 'Fehler: Datei nicht gefunden!'
  292. DefString PRINTErrorMSG3,    0, CR,LF, 'Fehler: Pfad nicht gefunden!'
  293. DefString PRINTErrorMSG4,    0, CR,LF, 'Fehler: Kein freies Handle mehr vorhanden!'
  294. DefString PRINTErrorMSG5,    0, CR,LF, 'Fehler: Zugriff verweigert!'
  295. DefString PRINTErrorMSG8,    0, CR,LF, 'Fehler: Warteschlange voll!'
  296. DefString PRINTErrorMSG9,    0, CR,LF, 'Fehler: PRINT beschäftigt!'
  297. DefString PRINTErrorMSGC,    0, CR,LF, 'Fehler: Dateiname ist zu lang!'
  298. DefString PRINTErrorMSGF,    0, CR,LF, 'Fehler: Falsches Laufwerk angegeben!'
  299. DefString PRINTUnknownError, 0, CR,LF, 'Fehler: Unbekannter Fehler!'
  300.  
  301. ShowPrintError:
  302.          push dx,cx,si
  303.  
  304.          mov dx,offset PRINTErrorMSG0
  305.          cmp al,0
  306.          je >l1
  307.          mov dx,offset PRINTErrorMSG1
  308.          cmp al,1
  309.          je >l1
  310.          mov dx,offset PRINTErrorMSG2
  311.          cmp al,2
  312.          je >l1
  313.          mov dx,offset PRINTErrorMSG3
  314.          cmp al,3
  315.          je >l1
  316.          mov dx,offset PRINTErrorMSG4
  317.          cmp al,4
  318.          je >l1
  319.          mov dx,offset PRINTErrorMSG5
  320.          cmp al,5
  321.          je >l1
  322.          mov dx,offset PRINTErrorMSG8
  323.          cmp al,8
  324.          je >l1
  325.          mov dx,offset PRINTErrorMSG9
  326.          cmp al,9
  327.          je >l1
  328.          mov dx,offset PRINTErrorMSGC
  329.          cmp al,0Ch
  330.          je >l1
  331.          mov dx,offset PRINTErrorMSGF
  332.          cmp al,0Fh
  333.          je >l1
  334.          mov dx,offset PRINTUnknownError
  335. l1:
  336.          mov si,dx
  337.          mov cl,[si]
  338.          xor ch,ch
  339.          inc dx
  340.          call OutputMsg
  341.  
  342.          pop si,cx,dx
  343.          ret
  344.  
  345.